package com.kanshu.service.impl;

import com.kanshu.constant.ListType;
import com.kanshu.constant.StatusType;
import com.kanshu.model.SocketUser;
import com.kanshu.service.MenuService;
import com.kanshu.service.NovelService;

import java.io.IOException;
import java.util.Scanner;

/**
 * @author GAIst
 * @ClassName MenuServiceImpl.java
 * @From
 * @Description OK
 * @createTime 2024年12月20日14:32:26
 */
public class MenuServiceImpl implements MenuService {
    private static ListType listType = new ListType();
    private static SocketUser socketUser;
    private static NovelService novelService = new NovelServiceImpl();
    private static StatusType statusType = new StatusType();

    static {
        try {
            socketUser = new SocketUser();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 显示菜单选项，并根据用户选择执行对应操作
     * 此方法是一个递归方法，如果用户选择的操作没有成功，会重新显示菜单
     *
     * @param sca  用于获取用户输入的Scanner对象
     * @param type 小说的类型，用于在调用novelMenu时指定类型
     * @throws IOException 如果在发送数据到socket时发生I/O错误
     */
    @Override
    public boolean menu(Scanner sca, String type) throws IOException {
        String choice;
        // 输出菜单分隔线和故事文本返回提示
        System.out.println(listType.getOUTPUT_SIGN_LINE() + listType.getSTORY_TEXT_RETURN());
        // 发送菜单选择请求到服务器
        socketUser.send(statusType.getSELECTMENU());
        // 输出菜单分隔线和选择提示
        System.out.println(listType.getOUTPUT_SIGN_LINE());
        System.out.println(listType.getOUTPUT_SIGN_SELECT());
        // 获取用户的选择
        choice = sca.nextLine();
        // 根据用户选择执行对应操作
        switch (choice) {
            case "0":
                // 如果用户选择0，则直接退出菜单
                break;
            case "1":
                // 如果用户选择1，则将小说类型设置为武侠，并调用novelMenu方法
                type = statusType.getCHWUXIA();
                // 如果novelMenu返回false，则重新显示菜单
                if (!novelService.novelMenu(sca, type)) {
                    menu(sca, type);
                }
                break;
            case "2":
                // 如果用户选择2，则将小说类型设置为言情，并调用novelMenu方法
                type = statusType.getCHYANQING();
                // 如果novelMenu返回false，则重新显示菜单
                if (!novelService.novelMenu(sca, type)) {
                    menu(sca, type);
                }
                break;
            default:
                // 如果用户输入无效，则输出无效输入提示，并重新显示菜单
                System.out.println(listType.getOUTPUT_TEXT_INVALIDINPUT());
                menu(sca, type);
        }

        // 方法结束，返回false
        return false;
    }

}
